import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os  # 新增导入os模块
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 设置 Matplotlib 字体为支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号


def analyze_and_visualize(file_path):
    # 读取 Excel 文件
    excel_file = pd.ExcelFile(file_path)

    # 创建可视化结果目录路径
    result_dir = os.path.join(os.path.dirname(__file__), '..', 'result')
    os.makedirs(result_dir, exist_ok=True)  # 自动创建目录

    # 获取指定工作表中的数据，设置表头行为 1
    df = excel_file.parse('all_data', header=1)

    # 查看数据的基本信息
    print('数据基本信息：')
    df.info()

    # 查看数据集行数和列数
    rows, columns = df.shape

    if rows < 100 and columns < 20:
        # 短表数据（行数少于100且列数少于20）查看全量数据信息
        print('数据全部内容信息：')
        print(df.to_csv(sep='\t', na_rep='nan'))
    else:
        # 长表数据查看数据前几行信息
        print('数据前几行内容信息：')
        print(df.head().to_csv(sep='\t', na_rep='nan'))


    # 查看数值型字段的分布情况
    df.hist(bins=20, figsize=(20, 20))
    plt.suptitle('数值型字段分布情况')
    plt.savefig(os.path.join(result_dir, 'histogram.png'),  # 新增保存代码
                bbox_inches='tight', dpi=300)
    plt.show()

    # 分析熟料量与热耗、热效率之间的关系，保留两位小数
    relation_1 = df['熟料量'].corr(df['热耗']).round(2)
    relation_2 = df['熟料量'].corr(df['热效率']).round(2)

    # 查看窑头秤、窑尾秤、喂料槽等关键指标的相关性，保留两位小数
    key_metrics = ['窑头秤', '窑尾秤', '喂料槽']
    correlation_matrix = df[key_metrics].corr().round(2)

    print(f'熟料量与热耗的关系：{relation_1}')
    print(f'熟料量与热效率的关系：{relation_2}')
    print('关键指标的相关性：\n', correlation_matrix)

    # 绘制关键指标的相关性热力图
    plt.figure(figsize=(8, 6))
    sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
    plt.title('关键指标相关性热力图')
    plt.savefig(os.path.join(result_dir, 'heatmap.png'),  # 新增保存代码
                bbox_inches='tight', dpi=300)
    plt.show()


if __name__ == '__main__':
    file_path = '../data/水泥煅烧课程项目数据.xlsx'
    analyze_and_visualize(file_path)